package ipark.sistemski;

import java.util.*;
import java.io.*;

// to bo klas ki bo jemal iz baze tu morajo biti vse metode ki jih bom klicala statistikaUI!
import java.util.logging.Level;
import java.util.logging.Logger;

public class Statko {
    
        private GregorianCalendar datum;
        private int podatkiInt[] = new int[7];  //podatki
        private double podatkiDouble[] = new double[2] ; //podatki
    
    public Statko(){
          //povezem se z bazo
            //tebeli s podatki napolnim z 0
            for(int i=0; i<7; i++)
               podatkiInt[i]=0;
            podatkiDouble[0]=0;
            podatkiDouble[1]=0;
             
        /* vpisal bo vrednosti iz fajla v spremenljivke, seveda ce fajl obstaja,
         * ce ne obstaja ga bom kreiral na koncu konstruktorja z klicem ustvariVse() 
         * POSEBNO POZORNOST POSVETI DAJ JE FAJL PRAVILNO SESTAVLJEN */
        File file = new File("STF.txt");
       if(file.exists()==true)
                getFromSTF();   //mi napolni celotni tabeli podatkiInt in podatkiDouble z vrednostmi iz STF.txt
       else
           ustvariVse();    //ce fajl ne obstaja ga bo naredo in vanj zapisal podatke
        
       //timer ki bo pazil na to da se bo vsakih 24 ur vpisalo v bazo
        //timer je nastavlej s klasom "schedul.java"
        
        }
    
    // ce bi hoto tu kaj spreminjat bi mogo nekak napisat funkcijo da se ponovno shrani vse v fajl
    // v fajl shranjujemo zato da lahko dostopam do spremenb, ki jih bo naredil nenad v phpju
    // te metode pa so za tiste klase, ki bodo spreminjale vrednosti
    public void setNoOfUsers(int a){this.podatkiInt[0]=a; ustvariVse(); }
    public void setProdanihMest(int b){this.podatkiInt[1]=b; ustvariVse();}
    public void setVsehMest(int c){this.podatkiInt[2]=c; ustvariVse();}
    public void setVhodov(int d){this.podatkiInt[3]=d; ustvariVse();}
    public void setIzhodov(int e){this.podatkiInt[4]=e; ustvariVse();}
    public void setPopNapak(int f){this.podatkiInt[5]=f; ustvariVse();}
    public void setVsehNapak(int g){this.podatkiInt[6]=g; ustvariVse();}
    public void setDnevniDoh(double h){this.podatkiDouble[0]=h; ustvariVse();}
    public void setCelotniDoh(double i){this.podatkiDouble[1]=i; ustvariVse();}
    
    public void ustvariVse(){
     try {
         File file = new File("STF.txt");
       if(file.exists()==false) file.createNewFile();
       BufferedWriter bw=new BufferedWriter(new FileWriter("STF.txt")); 
            bw.write(Integer.toString(podatkiInt[0])); //number of users
            bw.newLine();
            bw.write(Integer.toString(podatkiInt[1])); //prodanih mest
            bw.newLine();
            bw.write(Integer.toString(podatkiInt[2])); //vseh mest
            bw.newLine();
            bw.write(Integer.toString(podatkiInt[3])); //in cars
            bw.newLine();
            bw.write(Integer.toString(podatkiInt[4])); //out cares
            bw.newLine();
            bw.write(Integer.toString(podatkiInt[5])); //stv popravnljenih napak
            bw.newLine();
            bw.write(Integer.toString(podatkiInt[6])); //stv vseh napak
            bw.newLine();
            bw.write(Double.toString(podatkiDouble[0])); // dnevni dohodek
            bw.newLine();
            bw.write(Double.toString(podatkiDouble[1])); //celoten dohodek
            bw.flush();
            bw.close();
      
    } catch (IOException e) {
        System.out.println(e);
    }
}
    
   //statko mi bo open file STF.txt
   private void getFromSTF(){ 
       BufferedReader br; 
       String tmp;
        try {
            br = new BufferedReader(new FileReader("STF.txt"));
            for(int j=0; j<7; j++){
                tmp=br.readLine();
                podatkiInt[j] = Integer.parseInt(tmp);
            }
            
            tmp=br.readLine();
            podatkiDouble[0] = Double.parseDouble(tmp);
            tmp=br.readLine();
            podatkiDouble[1] = Double.parseDouble(tmp);
            br.close();
    
        } catch (FileNotFoundException ex) {
            Logger.getLogger(Statko.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
                Logger.getLogger(Statko.class.getName()).log(Level.SEVERE, null, ex);
            } 
 }

   public String getDatum(){
        String datString="";
        datum = new GregorianCalendar();
	if(datum!=null)
		datString=datum.get(datum.DAY_OF_MONTH)+"."+datum.get(datum.MONTH)+"."+datum.get(datum.YEAR);
	else
		datString="error";
        
        return datString;
        }
   
    @SuppressWarnings("static-access")
   public String getCas(){
    String datString="";
     datum = new GregorianCalendar();
	if(datum!=null){
            if(datum.get(datum.SECOND) >= 10 && datum.get(datum.MINUTE) >=10 && datum.get(datum.HOUR_OF_DAY) >= 10)
                datString=datum.get(datum.HOUR_OF_DAY)+":"+datum.get(datum.MINUTE)+":"+datum.get(datum.SECOND);
            else if (datum.get(datum.SECOND) >= 10 && datum.get(datum.MINUTE) >= 10 && datum.get(datum.HOUR_OF_DAY) < 10)
                datString="0"+datum.get(datum.HOUR_OF_DAY)+":"+datum.get(datum.MINUTE)+":"+datum.get(datum.SECOND);
            else if (datum.get(datum.SECOND) >= 10 && datum.get(datum.MINUTE) < 10 && datum.get(datum.HOUR_OF_DAY) < 10)
                datString="0"+datum.get(datum.HOUR_OF_DAY)+":0"+datum.get(datum.MINUTE)+":"+datum.get(datum.SECOND);
            else if (datum.get(datum.SECOND) < 10 && datum.get(datum.MINUTE) < 10 && datum.get(datum.HOUR_OF_DAY) < 10)
                datString="0"+datum.get(datum.HOUR_OF_DAY)+":0"+datum.get(datum.MINUTE)+":0"+datum.get(datum.SECOND);
            else if (datum.get(datum.SECOND) < 10 && datum.get(datum.MINUTE) >= 10 && datum.get(datum.HOUR_OF_DAY) >= 10)    
                datString=datum.get(datum.HOUR_OF_DAY)+":"+datum.get(datum.MINUTE)+":0"+datum.get(datum.SECOND);
            else if (datum.get(datum.SECOND) >= 10 && datum.get(datum.MINUTE) >= 10 && datum.get(datum.HOUR_OF_DAY)>= 10)
                datString=datum.get(datum.HOUR_OF_DAY)+":0"+datum.get(datum.MINUTE)+":"+datum.get(datum.SECOND);
            else if (datum.get(datum.SECOND) < 10 && datum.get(datum.MINUTE) >= 10 && datum.get(datum.HOUR_OF_DAY)>= 10)
                datString=datum.get(datum.HOUR_OF_DAY)+":"+datum.get(datum.MINUTE)+":0"+datum.get(datum.SECOND);
             else if (datum.get(datum.SECOND) < 10 && datum.get(datum.MINUTE) < 10 && datum.get(datum.HOUR_OF_DAY)>= 10)
                datString=datum.get(datum.HOUR_OF_DAY)+":0"+datum.get(datum.MINUTE)+":0"+datum.get(datum.SECOND);
             else if (datum.get(datum.SECOND) >= 10 && datum.get(datum.MINUTE) < 10 && datum.get(datum.HOUR_OF_DAY)>= 10)
                datString=datum.get(datum.HOUR_OF_DAY)+":0"+datum.get(datum.MINUTE)+":"+datum.get(datum.SECOND);
             else if (datum.get(datum.SECOND) < 10 && datum.get(datum.MINUTE) >= 10 && datum.get(datum.HOUR_OF_DAY) < 10)
                datString="0"+datum.get(datum.HOUR_OF_DAY)+":"+datum.get(datum.MINUTE)+":0"+datum.get(datum.SECOND); 
        }
        else datString="error";
        return datString;
}

    public int getNumOfUsers(){
    getFromSTF();
    return podatkiInt[0];
   }
  
    public int stZasedenih(){
    getFromSTF();
    return stVseh()-stProstih();
}

    public int stProstih(){
    getFromSTF();
    int stV = stVseh();
    int tmp= stV-stInCars()+stOutCars();
    if(tmp>=stV)
            return 0;
                 else if(tmp<=0)
                           return stV;
    return tmp;
}

    public int stKupljenih(){
    getFromSTF();
    return podatkiInt[1];
}

    public int stVseh(){
    getFromSTF();
    return podatkiInt[2];
}

    public int stCarsT(){
    getFromSTF();
    return stInCars()-stOutCars();
}

    public int stInCars(){
    getFromSTF();
    return podatkiInt[3];
}

    public int stOutCars(){
    getFromSTF();
    return podatkiInt[4];
}

    public int stNepErrors(){
    getFromSTF();
    
    return podatkiInt[6]-podatkiInt[5];
}

    public int stPopErrors(){
    getFromSTF();
    return podatkiInt[5];
}

    public int stAllErrors(){
    getFromSTF();
    return podatkiInt[6];
}
    
    public double getDailyIncome(){
    getFromSTF();
    return podatkiDouble[0];
}
    
    public double getTotalIncome(){
    getFromSTF();
    return podatkiDouble[1];
}
}
